﻿#pragma once
#define LK_WINDOWS_WINDOWSEXCEPTION_
namespace LK
{
	namespace Windows {
	struct PWindowsException :ptr<Exception>
	{
		PEXCEPTION(WindowsException, L"WindowsAPI异常")
#ifdef _CLR //托管支持
		/**
		@brief 从托管异常初始化*/
		PWindowsException(System::Exception^);
		/**
		@brief 转换到托管异常*/
		operator System::Exception ^ ()const;
#endif
		/**
		@brief 从错误码进行构造，这将自动查找错误描述*/
		PWindowsException(HRESULT code);
		/**
		@brief 获取错误码*/
		HRESULT GetErrorCode()const;
		};
		struct WindowsException :Exception
		{
			BEXCEPTION(WindowsException, Exception, L"WindowsAPI异常")
			/**
			@brief 根据错误码查找错误描述*/
			static ptr<String> GetDescriptionByCode(HRESULT code);
			/**
			@bief 错误码*/
			HRESULT errorCode;
			/**
			@brief 从错误码进行构造，这将自动查找错误描述*/
			WindowsException(HRESULT code);
#ifdef _CLR //托管支持
			/**
			@brief 从托管异常初始化*/
			WindowsException(System::Exception^ e);
			/**
			@brief 转换到托管异常*/
			operator System::Exception ^ ()const;
#endif
		};
	}
}
